package map;

import java.util.ArrayList;
import java.util.TreeMap;

/**
 * @program: play-structure
 * @author: baichen
 * 力扣350，输出两个集合的交集，交集中的 每个元素出现的次数，应与元素在两个数组中出现的次数一致。
 **/
public class IntersectionOfArray2 {
    public int[] intersect(int[] nums1, int[] nums2) {
        //通过map来实现，key表示交集中的元素，value表示出现的次数
        TreeMap<Integer, Integer> treeMap = new TreeMap<>();
        for (int num : nums1) {
            if (!treeMap.containsKey(num)) {//如果没有这个key，表示第一次出现，则存入并赋值为一
                treeMap.put(num, 1);
            } else {
                treeMap.put(num, treeMap.get(num) + 1);
            }
        }
        ArrayList<Integer> list = new ArrayList<>();
        for (int num : nums2) {
            if (treeMap.containsKey(num)) {
                list.add(num);
                //次数要减一
                treeMap.put(num, treeMap.get(num) - 1);
                if (treeMap.get(num) == 0) {
                    treeMap.remove(num);
                }
            }
        }
        int[] result=new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }
        return result;
    }
}
